fn main() {
    let a: i32 = 45;
    // 1.判断 if
    let flag: bool = if a == 45 { true } else { false };
    if a < 40 {
        println!("少于40");
    } else if a < 42 {
        println!("大于40少于42");
    } else {
    }

    // if let
    if let Some(_a2) = 45 {
        println!("等于45");
    } else {
        println!("不等于45");
    }

    // 2.循环
    // for
    // for in 结构可以遍历一个Iterator（迭代器），最简单的方法就是使用区间标记
    // a..b (从 a（包含此值） 到 b（不含此值）的)
    // 使用a..=b表示两端都包含在内的范围

    for i in 1..10{
        println!("{}",i.to_string());
    }


    let arr = [1; 5];
    for num in arr {
        println!("{:?}", num);
    }

    // iter - 在每次迭代中借用集合中的一个元素。这样集合本身不会被改变，循环之后仍可以使用
    // into_iter - 会消耗集合。在每次迭代中，集合中的数据本身会被提供。一旦集合被消耗了，之后就无法再使用了，因为它已经在循环中被 “移除”（move）了。
    // iter_mut - 可变地（mutably）借用集合中的每个元素，从而允许集合被就地修改。
    for num in arr.iter() {
        println!(" this value is {:?}", num);
    }

    // while
    let arrs = [0, 1, 2, 3, 4, 5];
    let mut index = 0;
    while index < 5 {
        println!("the value is: {}", arrs[index]);
        index += 1;
    }

    let mut _a3 = Some(5);
    while let Some(index) = _a3 {
        if (index > 5) {
            println!("end");
            _a3=None;
            break;
        } else {
          println!("")
        }
    }

    //loop
    let mut i: i32 = 0;

    // 无限循环
    let result = loop {
        i += 1;
        if i == 3 {
            println!("three");

            // 跳过这次迭代的剩下内容
            continue;
        }
        if i == 10 {
            println!("结束{:?}", i);
            break i;
        }
    };
    println!("计算结果{:?}", result);

    // Match
    let  day=5;
    match  day {
        // 使用@绑定变量
        e @ 0|6=>println!("放假了"),
        // 使用ref来得到一个引用    
        ref r =>println!("值得引用 {}",r),

        //
        1...5=>println!("猪头，干活了"),
        // 必须存在的
        _=>println!("错误")
    }
}
